-- 获取当前时间戳（毫秒）
local current_time = tonumber(redis.call('TIME')[1]) * 1000 + tonumber(redis.call('TIME')[2]) / 1000

-- 令牌桶的键名
local tokens_key = KEYS[1]
local last_refill_time_key = KEYS[2]

-- 令牌桶的容量和补充速率
local capacity = tonumber(ARGV[1])
local refill_rate = tonumber(ARGV[2])

-- 尝试消耗的令牌数量
local tokens_to_consume = tonumber(ARGV[3])

-- 获取上次补充令牌的时间戳
local last_refill_time = tonumber(redis.call('GET', last_refill_time_key)) or current_time

-- 计算时间差（毫秒）
local time_elapsed = current_time - last_refill_time

-- 计算新生成的令牌数量
local new_tokens = math.floor(time_elapsed * refill_rate / 1000)

-- 更新令牌数量
local current_tokens = tonumber(redis.call('GET', tokens_key)) or capacity
current_tokens = math.min(capacity, current_tokens + new_tokens)

-- 判断是否有足够的令牌
if current_tokens >= tokens_to_consume then
    -- 消耗令牌
    current_tokens = current_tokens - tokens_to_consume
    -- 更新令牌数量和上次补充时间
    redis.call('SET', tokens_key, current_tokens)
    redis.call('SET', last_refill_time_key, current_time)
    return 1
else
    -- 没有足够的令牌，限流
    return 0
end